package com.irdstudio.bsp.executor.core.plugin;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;

import org.apache.commons.lang3.StringUtils;

/**
 * 
 * TODO 文件合并/拆分工具类
 * 
 * @author Mr.Fang
 * @email luck_2088@163.com
 * @date 2019年1月23日 上午10:17:25
 *
 */
public class FileHandleUtil {
	/**
	 * 
	 * TODO 多文件合并
	 * 
	 * @param fileInPtahs 需要合并的文件路径集合
	 * @param fileOutPath 合并文件路径
	 * @return boolean
	 * @throws Exception
	 * @author Mr.Fang
	 * @email luck_2088@163.com
	 * @date 2019年1月23日 下午2:20:27
	 */
	public static boolean mergedFiles(List<String> fileInPtahs, String fileOutPath) throws Exception {
		boolean flag = true;
		FileOutputStream fos = null;
		FileInputStream temp = null;
		try {
			// 组装Vector<FileInputStream>
			Vector<FileInputStream> vector = new Vector<FileInputStream>();
			if (fileInPtahs == null || fileInPtahs.size() == 0 || StringUtils.isEmpty(fileOutPath)) {
				return false;
			}
			
			for (String path : fileInPtahs) {
				temp = new FileInputStream(path);
				vector.add(temp);
			}
			// 构建合并流
			Enumeration<FileInputStream> elements = vector.elements();
			try (SequenceInputStream sis = new SequenceInputStream(elements);) {
				// 写入到一个文件中,追加写入
				fos = new FileOutputStream(new File(fileOutPath),true);
				// 数组方式写入
				byte[] b = new byte[1024];
				int len = 0;
				while ((len = sis.read(b)) != -1) {
					// 写
					fos.write(b, 0, len);
				}
			}
		} catch (Exception e) {
			flag = false;
			throw new Exception(e);
		} finally {
			// 关闭资源
			if (fos != null) {
				fos.close();
			}
			if (temp != null) {
				temp.close();
			}
		}
		return flag;
	}
}
